When two or more operating systems operate on one piece of hardware, the processes associated with each operating system contend for the hardware that is available. Without something to mediate their access, one operating system's processes could monopolize or over-use the hardware to the detriment of the other operating system's processes. Therefore, a program sits between the operating systems and the hardware to act as a mediator. This program is commonly known as a “hypervisor.”
One of the jobs performed by the hypervisor is scheduling the order of execution of tasks associated with each operating system. This is not an easy job. Some tasks are time sensitive (e.g., tasks associated with input or output, speech processing, video processing, transmission or reception of signals, etc.) and some tasks are non-time-sensitive or are less-time-sensitive. Whatever the mix of time-sensitive and non-time-sensitive tasks, the respective operating systems are always presenting to the hypervisor tasks to be performed, and if the hypervisor does not wisely choose the order for executing those tasks, the performance of the entire system can be degraded.
The portion of a hypervisor that determines the order for executing the tasks is called a “scheduler.” Schedulers in the prior art, however, do not always choose wisely, and, therefore, the need exists for an improved scheduler.